home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tiger Disk 6
/
Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64
/
3 mk
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
7KB
|
160 lines
8 clr:restore
10 u$="[197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]":a$="adressierung":b$="beispiel: "
20 print"[147][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (3)"
30 print"[164][164][164][164][164]";o$;o$;o$:print"1.2.3. die ";a$;"smethoden[146]"
40 print"die genaue kenntnis der verschiedenen"
50 printa$;"smethoden ist fuer den pro-"
60 print"grammierer von groesster bedeutung."
70 print"soweit moeglich werden wir in den bei-"
80 print"spielen den befehl 'lda' verwenden."
90 print"'lda' ist die englische abkuerzung fuer"
100 print"'load accumulator'.":print" [163][160][160][163][160][163]"
120 i=1:gosub5000:ifflthen20
200 print"[147]der befehl 'lda' bewirkt folgendes: die"
210 print"cpu laed ein datenwort (byte) in den ac"
220 print"es gibt verschiedene moeglichkeiten,"
230 print"wie die cpu dies tun soll, bzw. woher"
240 print"sie das byte holen soll."
250 print"in diesem abschnitt lernen wir diese"
260 print"unterschiede kennen."
270 print"bei den ";a$;"en behalten wir die"
280 print"englischen bezeichnungen bei. das stu-"
290 print"dium[160] weiterfuehrender literatur wird"
300 print"dadurch erleichtert."
310 i=2:gosub5000:ifflthen20
400 print"[147][164][164]";o$;o$;o$:print"1.2.3.1. implied-";a$;"[146]"
410 print"'implied' sind alle 1-byte-befehle. ih-"
420 print"nen folgt weder ein datenwort noch eine"
430 print"adresse. das zu bearbeitende datenwort"
440 print"ergibt sich aus dem befehl."
450 printb$;" der befehl, den ihnhalt des":printu$
460 print"accumulators um 1 zu erhoehen."
510 i=3:gosub5000:ifflthen200
600 print"[147][164][164][164][164]";o$;o$;o$:print"1.2.3.2. immediate-";a$;"[146]"
610 print"'immediate' sind befehle, bei denen das"
620 print"zu bearbeitende byte dem befehl direkt"
630 print"folgt. befehle mit dieser ";a$
640 print"sind daher stets 2-byte-befehle."
650 print"wir schreiben hinter den befehl das"
660 print"zeichen '#', gefolgt von dem datenwort."
690 printb$;"der befehl, in den ac das da-":printu$
700 print"tenwort $00 zu laden: 'lda # $00'. der"
710 print"hexadezimale code fuer 'lda #' ist $a9."
720 print"im programmspeicher steht also $a9 $00."
740 i=4:gosub5000:ifflthen400
800 print"[147][164][164][164]";o$;o$;o$:print"1.2.3.3. absolute-";a$;"[146]"
810 print"'absolute' sind befehle, bei denen die"
820 print"adresse des zu bearbeitenden bytes dem"
830 print"befehlsbyte folgt. da adressen stets 2"
840 print"byte umfassen, ist die befehlslaenge 3":print"byte.
850 [153]"die 2 adressbytes sind dem befehlsbyte"
860 [153]"nachgestellt. zuerst das hoeherwertige,"
890 [153]"dann das niederwertige byte."
910 i[178]5:[141]5000:[139]fl[167]600
1000 [153]"load";b$;"das im speicher $0123 stehen-":[153]u$
1010 [153]"de byte soll in den ac geladen werden:"
1020 [153]"'lda $0123'. der hexadezimale code fuer"
1030 [153]"den befehl 'lda, absolute' ist $ad. im"
1040 [153]"programmspeicher sieht der befehl dann"
1050 [153]"so aus: '$ad $23 $01'. beachten sie die"
1060 [153]"reihenfolge der zwei adressbytes !"
1110 i[178]6:[141]5000:[139]fl[167]800
1200 [153]"loadtototo";o$;o$;o$:[153]"1.2.3.4. zeropage-";a$;"wait"
1210 [153]"'zeropage' sind befehle, bei denen dem"
1220 [153]"zu bearbeitenden befehl eine zeropage-":[153][163]30);u$
1230 [153]"-adresse folgt, d.h. das hoeherwertige":[153]u$
1240 [153]"byte der adresse wird automatisch als"
1250 [153]"$00 angenommen. statt lda $00fb heisst"
1260 [153]"es also 'lda $fb'. damit die cpu zero-"
1270 [153]"page und absolute befehle unterscheiden"
1280 [153]"kann, muessen die befehlscodes natuer-"
1290 [153]"lich unterschiedlich sein."
1310 i[178]7:[141]5000:[139]fl[167]1000
1400 [153]"loaddurch diesen kunstgriff sind zeropage-"
1410 [153]"befehle 2-byte-befehle, sparen also ge-"
1420 [153]"genueber den absolute-befehlen ein byte"
1430 [153]"und somit speicherplatz. zudem sind sie"
1440 [153]"schneller. nachteil: auf der null-seite"
1450 [153]"liegen die adressen $0000 - $00ff, das"
1460 [153]"sind also nur 256 speicher. mit diesen"
1470 [153]"muss der programmierer auskommen."
1510 i[178]8:[141]5000:[139]fl[167]1200
1600 [153]"load";o$:[153]"1.2.3.5. wait";o$;o$;o$
1605 [153]"absolute indexed with x-";a$;"wait"
1610 [153]"befehlen mit dieser ";a$;" folgt"
1620 [153]"eine 2-byte-adresse. die cpu erhoeht"
1630 [153]"diese adresse um den inhalt des xr. der"
1640 [153]"befehl wird dann ausgefuehrt mit dem"
1650 [153]"byte, das sich in der speicherzelle be-"
1660 [153]"findet, deren adresse sich durch diese"
1670 [153]"addition ergab. der inhalt des xrclose hat"
1680 [153]"also die funktion eines index. daher"
1690 [153]"der name 'index-register'."
1710 i[178]9:[141]5000:[139]fl[167]1400
1800 [153]"loadwir schreiben den befehl folgenderweise"
1810 [153]"'lda $0123,x'."
1820 [153]b$;" das xr habe den inhalt $a1.":[153]u$
1830 [153]"dann bewirkt der befehl 'lda $ff00,x',"
1840 [153]"dass der inhalt des speichers $ffa1 in"
1850 [153]"den ac geladen wird. durch den befehl"
1860 [153]"'lda $03ff,x' wird der inhalt des spei-"
1870 [153]"chers $04a0 (= $03ff + $a1 !) in den ac"
1880 [153]"geladen."
1910 i[178]10:[141]5000:[139]fl[167]1600
2000 [153]"loadindizierte befehle sind sehr maechtige"
2010 [153]"befehle. baut man sie in schleifen ein,"
2020 [153]"in denen bei jedem durchlauf das index-"
2030 [153]"register um 1 erhoeht wird, so kann man"
2040 [153]"mit sehr einfachen programmschleifen"
2050 [153]"weite speicherbereiche bearbeiten (z.b."
2060 [153]"nach einem bestimmten byte durchsuchen)"
2110 i[178]11:[141]5000:[139]fl[167]1800
2200 [153]"load";o$:[153]"1.2.3.6. wait";o$;o$;o$
2205 [153]"absolute indexed with y-";a$;"wait"
2210 [153]"hier wird zur indizierung das yr heran-"
2220 [153]"gezogen. ansonsten gilt das bei der in-"
2230 [153]"dizierung mit dem xr gesagte."
2310 i[178]12:[141]5000:[139]fl[167]2000
2400 [153]"load";o$:[153]"1.2.3.7. wait";o$;o$;o$
2405 [153]"zeropage indexed with x-";a$;"wait"
2410 [153]"anstelle einer absolute-adresse folgt"
2420 [153]"dem befehlsbyte eine zeropage-adresse."
2430 [153]"diese wird um den inhalt des xr erhoeht"
2450 [153]o$:[153]"1.2.3.8. wait";o$;o$;o$
2455 [153]"zeropage indexed with y-";a$;"wait"
2460 [153]"hier wird zur indizierung das yr heran-"
2470 [153]"gezogen. ansonsten gilt das obengesagte"
2510 i[178]13:[141]5000:[139]fl[167]2200
2600 [153]"loadaufgaben:":[153]u$
2610 [153]"was versteht man unter"
2620 [153]"1. implied-";a$
2630 [153]"2. immediate-";a$
2640 [153]"3. absolute-";a$
2650 [153]"4. zeropage-";a$
2660 [153]"5. absolute indexed-";a$;" ?"
2670 [153]"6. welche laengen haben befehle mit den"
2680 [153]" bei 1-5 aufgefuehrten ";a$;"en"
2690 [153]"7. welche vorteile bietet die zeropage-":[153]" ";a$;" ?"
2700 [153]"8. und welchen nachteil hat sie ?"
2710 i[178]14:[141]5000:[139]fl[167]2400
2800 [153]"loadwas bewirken die befehle (das xr habe":[153]"den inhalt $60):"
2820 [153]" 9. lda # $20":[153]"10. lda $20":[153]"11. lda $0120"
2830 [153]"12. lda $0120,x"
2840 [153]"13. lda $20,x"
2910 i[178]15:[141]5000:[139]fl[167]2600
3000 [153]"loadwas bewirken die befehle (das xr habe"
3005 [153]"nun den inhalt $00):"
3020 [153]"14. lda $20":[153]"15. lda $0020":[153]"16. lda $0020,x"
3030 [153]"17. lda $20,x"
3040 [153]"18. lda # $20"
3050 [153]" - seite 16 - <+> ontotototocmdcmdcmdcmdendewait <-> von vorne";
3060 [141]5020:[145]fl[137]0:[153]"load":[128]:[138]
5000 [143] umblaettern
5010 [153]" - seite";i;"- <+> weiter <-> zurueck";
5020 [129]i[178]0[164]11:[161]x$:[130]
5030 [161]x$:[139]x$[178]""[167]5030
5040 [139]x$[178]"+"[167]fl[178]0:[142]
5050 [139]x$[178]"-"[167]fl[178]1:[142]
5060 [137]5030
5100 [153][163]l)a$:[153][163]l)"(NULL)";b$;"(NULL)":[153][163]l)c$:[142]